МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
кафедра «Захист інформації»
Звіт
про виконання лабораторної роботи №3
з дисципліни:
" Криптографія і стеганографія "
на тему:
«ПОТОКОВІ ШИФРИ»
Мета роботи – Ознайомитися з основними алгоритмами побудови генераторів псевдовипадкових послідовностей та лінійними регістрами зсуву з зворотнім зв’язком.
Завдання
Підготувати програму на об'єктно-орієнтованій мові програмування, яка реалізовуватиме потоковий шифр на основі генератора з кількома РЗЛЗЗ, об’єднаних нелінійним способом, використовуючи дані відповідно до індивідуального завдання (див. табл.1).
Таблиця 1
Варіант
Генератор
РЗЛЗЗ
Поліном Р(х)
Текст
2
Pike
2 Галуа
ПІБ
Теоретичні відомості
Pike
Pike - це збіднена і урізана версія Fish, запропонована Росом Андерсоном, тим, хто зламав Fish . Він використовує три адитивні генератори. Наприклад:
Для генерації слова потоку ключів погляньте на біти перенесення при складанні . Якщо усі три однакові (всі нулі або усі одиниці), то тактуються усі три генератори. Якщо ні, то тактуються тільки два співпадаючі генератори. Збережіть біти перенесення для наступного разу. Остаточним виходом є XOR виходів трьох генераторів.
Pike швидше Fish, оскільки в середньому для отримання результату треба 2.75 дій, а не 3. Він також слиш-ком нова, щоб йому довіряти, але виглядає дуже непогано.
Регістр Галуа
На відміну від регістра Фібоначчі, де зворотний зв'язок є функцією від всіх комірок в регістрі, а результат поміщається в саму ліву комірку, зворотний зв'язок в регістрі Галуа потенційно застосований до кожної комірки регістра, хоча є функцією тільки від самої правої комірки.
У РЗЛЗЗ Галуа можна модифікувати схему зворотного зв'язку перетворивши регістр в так звану "конфігурацію Галуа". Не можна сказати, що генератор, що вийшов в результаті, стає кращим з криптографічної точки зору, але він теж може мати максимальний період і простий в програмній реалізації. У цій схемі замість використання біт з точок знімання для генерації нового найлівішого біта, кожен біт з точки знімання XOR з виходом генератора і замінюється сумою, що вийшла; потім вихід генератора стає новим самим лівим бітом.[6] Таким чином, на відміну від регістру Фібоначчі, де зворотний зв'язок є функцією від всіх комірок в регістрі, а результат поміщається в найлівішу комірку, зворотний зв'язок в регістрі Галуа потенційно застосовний до кожної комірки регістра, хоча є функцією тільки від значення найправішої комірки.
Рис. 5. Схема регістру Галуа з лінійним зворотним зв’язком
Виграш тут в тому, що всі операції XOR можна виконувати як одну операцію. Цю схему також можна розпаралелювати, а окремі многочлени зворотного зв'язку можуть бути різні. Крім того, конфігурація Галуа може працювати швидше і при апаратній реалізації.
Підводячи загальний підсумок, можна сказати, що якщо використовується елементна база з швидкою реалізацією зсуву, то слід звернутися до регістрів Фібоначчі; якщо ж є можливість застосувати розпаралелювання, то кращий вибір - регістр Галуа.
У разі програмної реалізації найшвидшими є примітивні тричлени, оскільки для генерації кожного нового біту послідовності складаються всього два біти.
Текст програми:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
class Make
{
public void PrintIntArray(int[] array)
{
for (int i = 0; i < array.Length; i++)
Console.Write("{0}\t", array[i]);
Console.WriteLine();
}
public void PrintULongArray(ulong[] array)
{
for (int i = 0; i < array.Length; i++)
Console.Write("{0}\t", array[i]);
Console.WriteLine();
}
public uint SumModTwo(uint num1, uint num2)
{
if (num1 == num...